package 简单.贪心思想;

/**
 * 给你一个整数数组 nums，和一个整数 k 。
 * 在一个操作中，您可以选择 0 <= i < nums.length 的任何索引 i 。
 * 将 nums[i] 改为 nums[i] + x ，其中 x 是一个范围为 [-k, k] 的整数。
 * 对于每个索引 i ，最多 只能 应用 一次 此操作。
 * nums 的 分数 是 nums 中最大和最小元素的差值。 
 * 在对  nums 中的每个索引最多应用一次上述操作后，返回 nums 的最低 分数 。
 * <p>
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode.cn/problems/smallest-range-i
 */
public class 最小差值I_908 {

    public static void main(String[] args) {

    }

    /**
     * 只需要考虑原数组的最大值 max 和 最小值 min
     * 使得 max - [0,k]  == min + [k]
     * max和min 之差最多等于 2k
     */
    public int smallestRangeI(int[] nums, int k) {
        int max = nums[0], min = nums[0];
        for (int num : nums) {
            max = Math.max(max, num);
            min = Math.min(min, num);
        }
        return Math.max(0, max - min - 2 * k);
    }

}
